package sixth_day;

/**
 * 如何判断一个数是否是2的k次方？这里不需要确定k的值。例如：1是2的0次方，2是2的1次方，4是2的平方，求
 * N是不是2的K次方？
 */
public class PowerNum {
    public static void main(String[] args) {
        System.out.println(isPower(1));
    }
    // 1 让数从1开始乘二，若等于该数则是
//    public static boolean isPower(int num) {
//        int tmp = 1;
//        while (tmp < num) {
//            tmp *= 2;
//        }
//        if (tmp == num) {
//            return true;
//        }
//        return false;
//    }

    // 2 如果某数是二的K次方则该数的二进制表示中只有一位是1
    public static boolean isPower(int num) {
        if (num < 1) {
            return false;
        }
        String s = "";
        int flag = 0;
        while (num > 0) {
            if (num % 2 == 0) {
                s += 0;
            } else {
                s += 1;
                flag += 1;
            }
            if (flag == 2) {
                return false;
            }
            num /= 2;
        }
        return false;
    }

    // mine
//    public static boolean isPower(int num) {
//        if (num == 1) {
//            return true;
//        }
//        double tmp = (double) num;
//        while (true) {
//            tmp = tmp / 2;
//            if (tmp == 1) {
//                return true;
//            } else if (tmp < 2) {
//                break;
//            }
//        }
//        return false;
//    }
}
